package pwd.allen.behavior.template;

/**
 * @author 门那粒沙
 * @create 2021-05-22 20:32
 **/
public abstract class AbstractClass {
    /**
     * 模板方法
     * 加上final关键词防止子类重写
     */
    public final void templateMethod() {
        if (doSpecificMethod()) {
            specificMethod();
        }
        abstractMethod();
    }

    /**
     * 钩子方法，让子类可以控制父类的逻辑
     * @return
     */
    public abstract boolean doSpecificMethod();

    /**
     * 具体方法
     */
    public void specificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }

    /**
     * 抽象方法
     */
    public abstract void abstractMethod();

}
